package com.wy._02io.enums;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public enum FileRelationEnum {
    ONESELF("自己", PITFHEnum.getDistances(0)),  //全等
    BROTHER("兄弟", PITFHEnum.getDistances(0)),  // 父目录相同，且全部为目录
    SISTER("姐妹", PITFHEnum.getDistances(0)),   // 父目录相同全部为文件
    BROTHER_AND_SISTER("兄妹", PITFHEnum.getDistances(0)), //父目录相同，一个为文件一个为目录
    BESIDE_PITFH("旁亲", PITFHEnum.getDistances(0)), // 父目录不同。

    SON("儿子", PITFHEnum.getDistances(1)),    // 第一个比第二个的目录级别层级小1 第一个是目录   第二个的父亲是第一个，第二个是个文件
    DAUGHTER("女儿", PITFHEnum.getDistances(1)), // 第一个比第二个的目录级别层级小1 第二个的父亲是第一个  第二个是文件
    FATHER("父亲", PITFHEnum.getDistances(1)), // 第一个比第二个的目录级别层级大1   第一个的父亲是第二个，第二个是个文件
    AUNT("姑姑", PITFHEnum.getDistances(1)), //第一个比第二个的目录级别层级大1 第一个的爷爷，是第二个父亲。  第二个是个文件
    UNCLE("叔叔", PITFHEnum.getDistances(1)), //第一个比第二个的目录级别层级大1  第一个是文件，第一个的爷爷和第二个的父亲相等，

    GRANDFATHER("爷爷", PITFHEnum.getDistances(2)), //第一个比第二个的目录级别层级大2 第二个是文件夹，第一个的二爷爷是第二个
    GRANDSON("孙子", PITFHEnum.getDistances(2)), // 第一个比第二个的目录级别层级小2 ，第一个是文件夹，第二个是文件夹，第二个的爷爷是第一个
    GRANDDAUGHTER("孙女", PITFHEnum.getDistances(2)), // 第一个比第二个的目录级别层级小2， 第一个是文件夹，第二个是文件，第二个的父亲的父亲是第一个。
    FATHER_AUNT("老姑", PITFHEnum.getDistances(2)), //第一个比第二个的目录级别层级大2 第二个是文件 ，第一个的老爷爷和第二个的父亲是一个
    FATHER_UNCLE("老叔", PITFHEnum.getDistances(2)),//第一个比第二个的目录级别层级大2 第二个是文件夹。第二个的父亲是第一个的老爷爷

    ELDER_PITFH("远亲长辈", PITFHEnum.getDistances(1, -1)), YOUNG_PITFH("远亲晚辈", PITFHEnum.getDistances(1, -1)), FOREFATHERS("祖宗", PITFHEnum.getDistances(3, -1)),

    NONE("no_relation", PITFHEnum.getDistances(-1));

    private final String name;
    private final List<PITFHEnum> PITFHS;

    FileRelationEnum(String name, List<PITFHEnum> PITFHS) {
        this.name = name;
        this.PITFHS = PITFHS;
    }

    public String getName() {
        return name;
    }

    public List<PITFHEnum> getPITFHS() {
        return PITFHS;
    }

    private static List<FileRelationEnum> getFileRelationsWithSinglePITFH(int distance) {
        return Arrays.stream(values()).filter(relation -> relation.getPITFHS().size() == 1).filter(relation -> relation.getPITFHS().get(0).getDistance() == distance).collect(Collectors.toList());
    }

    /**
     * 这儿感觉有些问题。缺失了没有关系的部分
     *
     * @param PITFH
     * @return
     */
    public static List<FileRelationEnum> getFileProbablyRelateByDirCount(int PITFH) {
        switch (PITFH) {
            case 0:
                return getFileRelationsWithSinglePITFH(0);
            case 1:
                return getFileRelationsWithSinglePITFH(1);
            case 2:
                return getFileRelationsWithSinglePITFH(2);
            default:
                if (PITFH > 2) {
                    return Arrays.stream(values()).filter(relation -> relation.PITFHS.size() != 1).collect(Collectors.toList());
                } else {
                    System.out.println("传入的数据不能为负数");
                    return null;
                }
        }
    }
}
